#ifndef _HTTP_H
#define _HTTP_H

// 终端颜色定义
#define COLOR_RESET   "\x1b[0m"
#define COLOR_RED     "\x1b[31m"
#define COLOR_GREEN   "\x1b[32m"
#define COLOR_YELLOW  "\x1b[33m"
#define COLOR_BLUE    "\x1b[34m"
#define COLOR_MAGENTA "\x1b[35m"
#define COLOR_CYAN    "\x1b[36m"
#define COLOR_WHITE   "\x1b[37m"

// 定义解析器状态
typedef enum {
    STATE_START,          // 初始状态
    STATE_METHOD,         // 解析HTTP方法
    STATE_URI,            // 解析URI
    STATE_VERSION,        // 解析HTTP版本
    STATE_HEADER_KEY,     // 解析头部键
    STATE_HEADER_VALUE,   // 解析头部值
    STATE_BODY,           // 解析消息体
    STATE_CR,             // 遇到回车符\r
    STATE_LF,             // 遇到换行符\n
    STATE_COMPLETE,       // 解析完成
    STATE_ERROR           // 解析错误
} ParserState;

// 定义HTTP方法枚举
typedef enum {
    HTTP_GET,
    HTTP_POST,
    HTTP_PUT,
    HTTP_DELETE,
    HTTP_HEAD,
    HTTP_UNKNOWN
} HttpMethod;

// 解析器结构体
typedef struct {
    ParserState state;     // 当前状态
    HttpMethod method;     // 请求方法
    char uri[1024];        // 请求URI
    char version[16];      // HTTP版本
    char cur_key[128];     // 当前解析的头部键
    char cur_value[4096];  // 当前解析的头部值
    int content_length;    // 正文长度
    int header_count;      // 已解析头部数量
    int body_index;        // 正文已读字节数
    char body[4096];       // 存储正文内容
} HttpParser;

void demo_http_parsing();
#endif